package Client.Socket;

import java.util.ArrayList;
import java.util.StringTokenizer;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import ClasesBase.Fila;
import Client.gui.VendingPanel;
import Server.SocketManager;

public class GestorComunicaciones implements Runnable {

	private SocketManager sm;
	private String clientSentence;
	private boolean parar;
	private VendingPanel jf;
	private String codigo;
	private boolean actualizar;
	private ArrayList<Fila> arrayFilas;
	private ArrayList<ArrayList<Fila>> arrayDeArrays;

	public GestorComunicaciones(SocketManager socket, VendingPanel jframe) {
		sm = socket;
		clientSentence = "";
		parar = false;
		jf = jframe;
		codigo = "";
		actualizar = false;
		arrayFilas = new ArrayList();
		arrayDeArrays = new ArrayList();
	}

	@Override
	public void run() {

		while (!parar) {
			try {
				clientSentence = sm.Leer();
				codigo = clientSentence.substring(0, 6);

				if (codigo.equals("INI122")) {
					System.out.println("CLIENTE: Comienza el ArrayList");
					boolean finalizado = false;
					int maquinaActual = 1;
					while (!finalizado) {
						try {
							clientSentence = sm.Leer();
							codigo = clientSentence.substring(0, 6);
							if (codigo.equals("FIN222")) {
								finalizado = true;
								System.out.println("CLIENTE: ArrayList completo");
								arrayDeArrays.add(arrayFilas);
								jf.rellenarArray(arrayDeArrays);
								
								System.out.println("---------------------------------------------------------------");
								System.out.println("---------------------------------------------------------------");
								System.out.println("---------------------------------------------------------------");
								
								for (int i=0; i<arrayDeArrays.size(); i++) {
									ArrayList<Fila> a = arrayDeArrays.get(i);
									for (int x=0; x<a.size(); x++) {
										Fila f = a.get(x);
										System.out.println("Se ha recibido esta fila: " + f.getPos() + "-" + f.getId_producto() + "-" + f.getCantidad() + "-" + f.getCantidadMaxima() + "-" + f.getFechaUltimaRecarga());
									}
								}
								
							}
							else if (codigo.equals("SIGMAQ")) {
								maquinaActual++;
								System.out.println("CLIENTE: Siguiente maquina");
								arrayDeArrays.add(arrayFilas);
								arrayFilas = new ArrayList();
							}
							else {
								StringTokenizer tokens = new StringTokenizer(clientSentence, ":");
								String posicion = tokens.nextToken();
								String producto = tokens.nextToken();
								String cantidad = tokens.nextToken();
								String cantidadMax = tokens.nextToken();
								String fechaUltimaRecarga = tokens.nextToken();
								
								//TODO DESPUES DE RECIBIR LAS FILAS ACTUALIZAR LA VENTANA
								//System.out.println("CLIENTE: Se ha recibido esta fila: " + posicion + "-" + producto + "-" + cantidad + "-" + cantidadMax + "-" + fechaUltimaRecarga + " de la maquina " + maquinaActual);
								Fila f = new Fila(posicion, producto, cantidad, cantidadMax, fechaUltimaRecarga);
								arrayFilas.add(f);
							}
						} catch (Exception e) {}
					}
				}
				
				else if (codigo.equals("ARRAYM")) {
					int maquina = Integer.parseInt(clientSentence.substring(6, 7));
					ArrayList<Fila> array = jf.obtenerArrayMaquina(maquina);
					
					for (int x=0; x<array.size(); x++) {
						Fila f = array.get(x);
						String sentencia = f.getPos() + ":" + f.getId_producto() + ":" + 
						f.getCantidad() + ":" + f.getCantidadMaxima() + ":" + f.getFechaUltimaRecarga();
						sm.Escribir(sentencia + "\r\n");
					}
					
					sm.Escribir("FIN\r\n");
				}

				else if (codigo.equals("FUERA")) {
					parar = true;
					sm.CerrarSocket();
					sm.CerrarStreams();
				}

			} catch (Exception e) {
				jf.dispose();
				JOptionPane.showMessageDialog(null, "ERROR, SERVIDOR SATURADO O EL SERVIDOR SE HA CAIDO", "Error de conexion", JOptionPane.ERROR_MESSAGE);
				parar = true;
			}
		}
	}
}
